package com.daodway.designpattern.mediatorpattern.wide;

import java.util.ArrayList;
import java.util.Collection;

/**
 * 实现部门和人员交互的中介者实现类
 *
 */
public class DepUserMediatorImpl {
	private static DepUserMediatorImpl mediator = new DepUserMediatorImpl();
	 
    private DepUserMediatorImpl(){
               initTestData();
    }

    public static DepUserMediatorImpl getInstance(){
              return mediator;
    }
    /**
     * 记录部门和人员关系
     */
    private final Collection<DepUserModel> depUserCol = new ArrayList<DepUserModel>();
      /**
       * 初始化测试数据
       */
     private void initTestData(){
                 DepUserModel du1 = new DepUserModel();
                 du1.setDepUserId("du1");
                 du1.setDepId("d1");
                 du1.setUserId("u1");
                 depUserCol.add(du1);

                 DepUserModel du2 = new DepUserModel();
                 du2.setDepUserId("du2");
                 du2.setDepId("d1");
                 du2.setUserId("u2");
                 depUserCol.add(du2);

                 DepUserModel du3 = new DepUserModel();
                 du3.setDepUserId("du3");
                 du3.setDepId("d2");
                 du3.setUserId("u3");
                 depUserCol.add(du3);

                 DepUserModel du4 = new DepUserModel();
                 du4.setDepUserId("du4");
                 du4.setDepId("d2");
                 du4.setUserId("u4");
                 depUserCol.add(du4);

                 DepUserModel du5 = new DepUserModel();
                 du5.setDepUserId("du5");
                 du5.setDepId("d2");
                 du5.setUserId("u1");
                 depUserCol.add(du5);
     }
     /**
      * 当部门被撤销时，应删去部门与该部门中人员的关系
      * @param depId 被撤销部门的编号
      * @return
      */
     public boolean deleteDep(String depId){
               Collection<DepUserModel> tempCol = new ArrayList<DepUserModel>();
               for(DepUserModel du : depUserCol){
                          if(du.getDepId().equals(depId)){
                                       tempCol.add(du);
                          }
               }
               depUserCol.removeAll(tempCol);
               return true;
     }
     /**
      * 当人员离职时，应删去该人员与所在部门的关系
      * @param userId 离职人员的编号
      * @return
      */
    public boolean deleteUser(String userId){
              Collection<DepUserModel> tempCol = new ArrayList<DepUserModel>();
              for(DepUserModel du : depUserCol){
                          if(du.getUserId().equals(userId)){
                                      tempCol.add(du);
                          }
               }
              depUserCol.removeAll(tempCol);
              return true;
   }
   /**
    * 显示部门中的所有人员
    * @param dep 部门对象
    */
   public void showDepUser(Dep dep){
             for(DepUserModel du : depUserCol){
                       if(du.getDepId().equals(dep.getDepId())){
                                 System.out.println("部门编号=" + dep.getDepId() + "下面拥有人员，其编号是：" + du.getUserId());
                       }
               }
  }
  /**
   * 显示人员所在的部门
   * @param user 人员对象
   */
  public void showUserDeps(User user){
            for(DepUserModel du : depUserCol){
                     if(du.getUserId().equals(user.getUserId())){
                                 System.out.println("人员编号=" + user.getUserId() + "属于部门编号是：" + du.getDepId());
                     }
             }
 }
 /**
  * 完成因人员调换部门引起的与部门的交互
  * @param userId 被调换的人员的编号
  * @param oldDepId 调换前的部门编号
  * @param newDepId 调换后的部门编号
  * @return
  */
 public boolean changeDep(String userId, String oldDepId, String newDepId){
           // 本示例就不实现了
           return false;
 }
 /**
  * 因部门合并所引起的与人员的交互
  * @param colDepIds 需要被合并的部门编号
  * @param newDep 合并后部门的编号
  * @return
  */
 public boolean joinDep(Collection<String> colDepIds, Dep newDep){
           // 本示例就不是实现了
           return false;
 }
}
